home *** CD-ROM | disk | FTP | other *** search
- {*******************************************************}
- { TExcel Component Demo for Delphi 1.0 .. 3.0 }
- { }
- { Copyright (c) 1996, 1997 Tibor F. Liska }
- { Tel/Fax: 00-36-1-165-2019 }
- { Office: 00-36-1-209-5284 }
- { E-mail: liska@sztaki.hu }
- {*******************************************************}
- unit ExcelTop;
-
- interface
-
- uses
- Messages, SysUtils, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls, Spin, Buttons, Excels;
-
- type
- TForm1 = class(TForm)
- Panel1: TPanel;
- cmTable: TBitBtn;
- CheckBox1: TCheckBox;
- SpinEdit1: TSpinEdit;
- SpinEdit2: TSpinEdit;
- SpinEdit3: TSpinEdit;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- LabelTime: TLabel;
- LabelTotal: TLabel;
- LabelTransfer: TLabel;
- cmStop: TBitBtn;
- Panel2: TPanel;
- cmCommand: TBitBtn;
- ComboBox1: TComboBox;
- Label5: TLabel;
- cmClose: TBitBtn;
- Timer1: TTimer;
- Panel3: TPanel;
- cmRun: TBitBtn;
- Label7: TLabel;
- ComboBox3: TComboBox;
- Panel4: TPanel;
- cmRequest: TBitBtn;
- Label6: TLabel;
- ComboBox2: TComboBox;
- Panel5: TPanel;
- cmGetCell: TBitBtn;
- Label9: TLabel;
- Label8: TLabel;
- SpinEdit4: TSpinEdit;
- SpinEdit5: TSpinEdit;
- GroupBox1: TGroupBox;
- Memo: TMemo;
- procedure FormCreate(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure Timer1Timer(Sender: TObject);
- procedure ExcelOpen (Sender: TObject);
- procedure ExcelClose(Sender: TObject);
- procedure cmCloseClick(Sender: TObject);
- procedure cmTableClick(Sender: TObject);
- procedure cmCommandClick(Sender: TObject);
- procedure cmRequestClick(Sender: TObject);
- procedure cmRunClick(Sender: TObject);
- procedure ComboBox2Change(Sender: TObject);
- procedure cmStopClick(Sender: TObject);
- procedure cmGetCellClick(Sender: TObject);
- private
- Stop : Boolean;
- public
- {$IFNDEF INSTALLED}
- Excel : TExcel;
- {$ENDIF}
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- {$IFNDEF INSTALLED}
- Excel := TExcel.Create(Self);
- {$ENDIF}
- ComboBox1.ItemIndex := 0;
- ComboBox2.ItemIndex := 0;
- ComboBox3.ItemIndex := 0;
- SpinEdit3.Value := Excel.WaitAfter;
- Timer1.Enabled := True; { Delayed Connect }
- end;
-
- procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- if Excel.Connected then Excel.CloseMacroFile;
- Excel.OnClose := nil;
- end;
-
- procedure TForm1.Timer1Timer(Sender: TObject);
- begin
- Screen.Cursor := crHourGlass;
- try
- Timer1.Enabled := False;
- Excel.OnOpen := ExcelOpen;
- Excel.OnClose := ExcelClose;
- Excel.Connect; { Same as Excel.Connected := True; }
- finally
- Screen.Cursor := crDefault;
- end; end;
-
- procedure TForm1.ExcelOpen(Sender: TObject);
- var
- MacroFile : TFileName;
- begin
- cmTable .Enabled := True;
- cmCommand.Enabled := True;
- MacroFile := ExtractFilePath(ParamStr(0))+'TExcel.xls';
- if FileExists(Macrofile) then
- begin
- Excel.OpenMacroFile(MacroFile, True);
- cmRun.Enabled := True;
- end
- else
- cmRun.Enabled := False;
- cmRequest.Enabled := True;
- cmGetCell.Enabled := True;
- end;
-
- procedure TForm1.ExcelClose(Sender: TObject);
- begin
- cmTable .Enabled := False;
- cmCommand.Enabled := False;
- cmRun .Enabled := False;
- cmRequest.Enabled := False;
- cmGetCell.Enabled := False;
- ShowMessage('Excel closed');
- end;
-
- procedure TForm1.cmCloseClick(Sender: TObject);
- begin
- Close;
- end;
-
- procedure TForm1.cmTableClick(Sender: TObject);
- var
- i, j, n, Rows, Cols : Longint;
- t0 : TDateTime;
- NewTable : Boolean;
- begin
- Rows := SpinEdit1.Value;
- Cols := SpinEdit2.Value;
- Excel.WaitAfter := SpinEdit3.Value;
- NewTable := CheckBox1.State = cbChecked;
- Excel.Wait;
- if not NewTable and (Excel.Selection = msgNoReply) then
- raise Exception.Create(msgNoTable);
- Stop := False;
- cmStop.BringToFront;
- cmStop.Visible := True;
- cmStop.SetFocus;
- LabelTotal.Caption := 'of ' + IntToStr(Rows * Cols) + ' transfers';
- t0 := Time; { Start time }
- try
- Excel.StartTable(NewTable);
- n := 0;
- for i:=1 to Rows do
- for j:=1 to Cols do
- begin
- LabelTime.Caption := TimeToStr(Time - t0);
- n := n + 1;
- LabelTransfer.Caption := IntToStr(n);
- Excel.PutInt(i, j, i*100000+j);
- if Stop then
- raise Exception.Create('Progress cancelled');
- end;
- finally
- LabelTime.Caption := TimeToStr(Time - t0); { End time }
- cmStop.Visible := False;
- Excel.EndTable; { Show table }
- end; end;
-
- procedure TForm1.cmCommandClick(Sender: TObject);
- begin
- Excel.Exec(ComboBox1.Text);
- end;
-
- procedure TForm1.cmRequestClick(Sender: TObject);
- var
- i : Integer;
- Reply : string;
- begin
- Memo.Lines.Clear;
- Reply := Excel.Request(ComboBox2.Text);
- i := Pos(#9, Reply);
- while i > 0 do
- begin
- Memo.Lines.Add(Copy(Reply, 1, i-1));
- Delete(Reply, 1, i);
- i := Pos(#9, Reply);
- end;
- Memo.Lines.Add(Reply);
- end;
-
- procedure TForm1.cmGetCellClick(Sender: TObject);
- begin
- Screen.Cursor := crHourGlass;
- try
- Memo.Lines.Clear;
- Memo.Lines.Add(Excel.GetCell(SpinEdit4.Value, SpinEdit5.Value));
- finally
- Screen.Cursor := crDefault;
- end; end;
-
- procedure TForm1.cmRunClick(Sender: TObject);
- begin
- Excel.Run(ComboBox3.Text);
- end;
-
- procedure TForm1.ComboBox2Change(Sender: TObject);
- begin
- Memo.Lines.Clear;
- end;
-
- procedure TForm1.cmStopClick(Sender: TObject);
- begin
- Stop := True;
- end;
-
- end.